import axios from 'axios'
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
import { ElMessage } from 'element-plus'
import pinia from '@/stores/index'
import { useUserInfoStore } from '../stores/userInfo'

// 定义接口返回类型
export interface ApiResponse<T = any> {
	code: number
	data: T
	message: string
}

// 创建axios实例
const service: AxiosInstance = axios.create({
	baseURL: import.meta.env.VITE_API_URL,
	timeout: 15000,
	headers: {
		'Content-Type': 'application/json'
	}
})

// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// 从 pinia 中获取 token
		const userStore = useUserInfoStore(pinia)
		const token = userStore.token
		
		// 如果有token则添加到请求头
		if (token && config.headers) {
			config.headers['Authorization'] = `Bearer ${token}`
		}
		
		return config
	},
	(error) => {
		console.error('请求拦截器错误:', error)
		return Promise.reject(error)
	}
)

// 响应拦截器
service.interceptors.response.use(
	(response: AxiosResponse) => {
		const res = response.data as ApiResponse
		console.log('响应数据:', res) // 添加响应日志
		
		// 这里根据实际接口返回格式调整
		if (res.code && res.code !== 200) {
			ElMessage.error(res.message || '请求失败')
			return Promise.reject(new Error(res.message || '请求失败'))
		}
		
		return res
	},
	(error) => {
		// 处理 401 未授权的情况
		if (error.response && error.response.status === 401) {
			const userStore = useUserInfoStore(pinia)
			userStore.reset()
			window.location.href = '/login'
			ElMessage.error('登录已过期，请重新登录')
		} else {
			ElMessage.error(error.message || '请求失败')
		}
		return Promise.reject(error)
	}
)

export default service
